package src.itheima02;

import java.util.HashSet;
import java.util.LinkedHashSet;

/*
    java.util.Collection<E>:接口
        单列集合的根接口,里面定义的方法,
        子接口/实现类都有

    java.util.Set<E>: 接口
        特点:
            1.无索引
            2.不可重复(唯一)
    常用实现类:
        java.util.HashSet<E> 类
            特点:
                1.无索引
                2.不可重复(唯一)
                3.无序: 不保证存入和取出的顺序是一致的

            底层数据结构:
                1.底层数据结构: 哈希表
                2.哈希表: 数组+链表/红黑树(节点数量>8)
                3.查询速度非常快

        java.util.LinkedHashSet<E> 类
            特点:
                1.无索引
                2.不可重复(唯一)
                3.有序: 保证存入和取出的顺序是一致的

            底层数据结构:
                1.底层数据结构: 哈希表 + 链表
                2.哈希表: 保证元素唯一
                3.链表: 保证元素有序
 */
public class Demo02Set {
    public static void main(String[] args) {
        HashSet<Integer> set1 = new HashSet<>();
        set1.add(1000);
        set1.add(1000);
        set1.add(8000);
        set1.add(8000);
        set1.add(5000);
        set1.add(5000);
        System.out.println(set1);//[8000, 1000, 5000]: 证明 不保证顺序,不可重复(唯一)
        //set1.get(0);//错误,说明没有索引,只用用迭代器/增强for

        LinkedHashSet<String> set2 = new LinkedHashSet<>();
        set2.add("bbb");
        set2.add("bbb");
        set2.add("ccc");
        set2.add("ccc");
        set2.add("aaa");
        set2.add("aaa");
        set2.add("111");
        set2.add("111");
        set2.add("Hello");
        set2.add("Hello");
        System.out.println(set2);//[bbb, ccc, aaa, 111, Hello],证明 保证顺序,不可重复(唯一)

        //set2.get(0);//错误,说明没有索引,只用用迭代器/增强for


    }
}
